﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Data.SqlClient;

namespace LI4.Data
{
    class Curso
    {
        private Ligacao ligacao;

        public Curso()
        {
            ligacao = new Ligacao();
        }

        public int inserir(Business.Curso curso)
        {
            ligacao.Update("INSERT [dbo].[Cursos] ( [nome], [cod_area], [rua], [cod_postal], [descricao], [nr_inscritos], [total_vagas], [remuneracao], [cod_localidade], [latitude], [longitude]) VALUES ('" + curso.Nome + "','" + curso.Area.Cod_Area + "','" + curso.Rua + "','" + curso.CodPostal + "','" + curso.Descricao + "','" + curso.Nrinscritos + "', '" + curso.Totalvagas + "','" + curso.Remuneracao + "','" + curso.Localidade.CodLocalidade + "','" + curso.Latitude + "','" + curso.Longitude + "')");

            return Ligacao.OK;
        }

        public int update(Business.Curso curso)
        {
            ligacao.Update("UPDATE [dbo].[Cursos] SET nome='" + curso.Nome + "',cod_area='" + curso.Area.Cod_Area + "', rua='" + curso.Rua + "',cod_postal='" + curso.CodPostal + "',descricao='" + curso.Descricao + "',nr_inscritos=" + curso.Nrinscritos + ", total_vagas=" + curso.Totalvagas + ",remuneracao='" + curso.Remuneracao + "',cod_localidade=" + curso.Localidade.CodLocalidade + ",latitude='" + curso.Latitude + "',longitude='" + curso.Longitude + "' where cod_curso='" + curso.CodCurso + "'");

            return Ligacao.OK;
        }
        public int remover(Business.Curso c)
        {
            
            try
            {
                ligacao.Update("DELETE [dbo].[cursos_inscritos] where cod_curso='" + c.CodCurso + "'");
                ligacao.Update("DELETE [dbo].[Cursos] where cod_curso='" + c.CodCurso + "'");
                return Ligacao.OK;
            }
            catch
            {
                return Ligacao.DBERROR;
            }
        }

        public Business.Curso getCurso(int codigo)
        {
            Business.Curso curso=null;
            SqlDataReader reader;

            ligacao.Select("SELECT Cursos.cod_curso, Cursos.nome, Cursos.cod_area,Cursos.rua,Cursos.cod_postal,Cursos.descricao,Cursos.total_vagas,Cursos.nr_inscritos,Cursos.total_vagas,Cursos.remuneracao,Cursos.cod_localidade,Cursos.latitude,Cursos.Longitude,Area.nome as nome_area, Localidades.nome as nome_local,Distritos.nome as nome_dist,Distritos.cod_distrito FROM Cursos,Area,Localidades,distritos where Cursos.cod_area=Area.cod_area and Cursos.cod_localidade=Localidades.cod_localidade and Distritos.cod_distrito=localidades.cod_distrito");
            reader = ligacao.mySqlDataReader;

            reader.Read();
            
            Business.Distrito dist = new LI4.Business.Distrito((int)reader["cod_distrito"], reader["nome_dist"].ToString());
            Business.Localidade local = new LI4.Business.Localidade((int)reader["cod_localidade"], dist, reader["nome_local"].ToString());
            Business.Area area = new Business.Area((int)reader["cod_area"], reader["nome_area"].ToString());

            curso = new Business.Curso(reader["nome"].ToString(), (int)reader["cod_curso"], area, reader["cod_postal"].ToString(), reader["rua"].ToString(), reader["descricao"].ToString(),
                (int)reader["total_vagas"], (int)reader["nr_inscritos"], (int)reader["remuneracao"], local, reader["latitude"].ToString(), reader["longitude"].ToString());
            

            reader.Close();
            

            return curso;
        }

        public ArrayList getCursos()
        {
            ArrayList array = new ArrayList();
            SqlDataReader reader;

            ligacao.Select("SELECT Cursos.cod_curso, Cursos.nome, Cursos.cod_area,Cursos.rua,Cursos.cod_postal,Cursos.descricao,Cursos.total_vagas,Cursos.nr_inscritos,Cursos.total_vagas,Cursos.remuneracao,Cursos.cod_localidade,Cursos.latitude,Cursos.Longitude,Area.nome as nome_area, Localidades.nome as nome_local,Distritos.nome as nome_dist,Distritos.cod_distrito FROM Cursos,Area,Localidades,distritos where Cursos.cod_area=Area.cod_area and Cursos.cod_localidade=Localidades.cod_localidade and Distritos.cod_distrito=localidades.cod_distrito");
            reader = ligacao.mySqlDataReader;

            while (reader.Read())
            {
                Business.Distrito dist = new LI4.Business.Distrito((int)reader["cod_distrito"],reader["nome_dist"].ToString());
                Business.Localidade local = new LI4.Business.Localidade((int)reader["cod_localidade"],dist,reader["nome_local"].ToString());
                Business.Area area = new Business.Area((int)reader["cod_area"], reader["nome_area"].ToString());

                array.Add(new Business.Curso(reader["nome"].ToString(), (int)reader["cod_curso"], area, reader["cod_postal"].ToString(), reader["rua"].ToString(), reader["descricao"].ToString(),
                    (int)reader["total_vagas"],(int)reader["nr_inscritos"],(int)reader["remuneracao"],local,reader["latitude"].ToString(),reader["longitude"].ToString()));
            }

            reader.Close();
            return array;
        }

        public bool existeCandidatoCurso(string username, int cod_curso)
        {
            SqlDataReader reader;

            ligacao.Select("SELECT username FROM cursos_inscritos where username='" + username + "' and cod_curso='" + cod_curso + "';");
            reader = ligacao.mySqlDataReader;
            bool existe = reader.Read();
            reader.Close();

            return existe;
        }
    }
}
